
 1000   .LIF
 1010         .TI 76,65816 DISASSEMBLER.................FEBRUARY 14, 1985...........
 1020  *SAVE S.65816 DISASM
 1030  *--------------------------------
 1040  IMM.SIZE .EQ $00
 1050  LMNEM    .EQ $2C
 1060  RMNEM    .EQ $2D
 1070  FORMATL  .EQ $2E
 1080  LENGTH   .EQ $2F
 1090  FORMATH  .EQ $30
 1100  PCL      .EQ $3A
 1110  PCH      .EQ $3B
 1120  *--------------------------------
 1130  SCRN2  .EQ $F879
 1140  RELADR .EQ $F938
 1150  PRNTAX .EQ $F941
 1160  PRBLNK .EQ $F948
 1170  PRBL2  .EQ $F94A
 1180  PCADJ  .EQ $F953
 1190  CROUT  .EQ $FD8E
 1200  PRBYTE .EQ $FDDA
 1210  COUT   .EQ $FDED
 1220  *--------------------------------
 1230         .MA ON
 1240         .LIST OFF
 1250  L1     .SE ']1-64
 1260  L2     .SE ']2-64
 1270  L3     .SE ']3-64
 1280  *      .LIST ON
 1290  ]1]2]3]4 .DA L1*32+L2*32+L3*2
 1300         .EM
 1310  *--------------------------------
 1320         .MA OXA
 1330         .DA #]1-OPNAMES.A/2+128
 1340         .EM
 1350  *--------------------------------
 1360         .MA OXB
 1370         .DA #]1-OPNAMES.B/2
 1380         .EM
 1390  *--------------------------------
 1400  T      LDA $C083
 1410         LDA $C083
 1420         LDA #INSTDSP
 1430         STA $FE65
 1440         LDA /INSTDSP
 1450         STA $FE66
 1460         LDA IMM.SIZE
 1470         EOR #$FF
 1480         STA IMM.SIZE
 1490         RTS
 1500  *--------------------------------
 1510  OPNAMES.A
 1520         >ON A,S,L,A
 1530         >ON B,R,K
 1540         >ON C,L,C
 1550         >ON C,L,D
 1560         >ON C,L,I
 1570         >ON C,L,V
 1580         >ON C,O,P
 1590         >ON D,E,C,A
 1600         >ON D,E,X
 1610         >ON D,E,Y
 1620         >ON I,N,C,A
 1630         >ON I,N,X
 1640         >ON I,N,Y
 1650         >ON L,S,R,A
 1660         >ON N,O,P
 1670         >ON P,H,A
 1680         >ON P,H,B
 1690         >ON P,H,D
 1700         >ON P,H,K
 1710         >ON P,H,P
 1720         >ON P,H,X
 1730         >ON P,H,Y
 1740         >ON P,L,A
 1750         >ON P,L,B
 1760         >ON P,L,D
 1770         >ON P,L,P
 1780         >ON P,L,X
 1790         >ON P,L,Y
 1800         >ON R,O,L,A
 1810         >ON R,O,R,A
 1820         >ON R,T,I
 1830         >ON R,T,L
 1840         >ON R,T,S
 1850         >ON S,E,C
 1860         >ON S,E,D
 1870         >ON S,E,I
 1880         >ON S,T,P
 1890         >ON T,A,X
 1900         >ON T,A,Y
 1910         >ON T,C,D
 1920         >ON T,C,S
 1930         >ON T,D,C
 1940         >ON T,S,C
 1950         >ON T,S,X
 1960         >ON T,X,A
 1970         >ON T,X,S
 1980         >ON T,X,Y
 1990         >ON T,Y,A
 2000         >ON T,Y,X
 2010         >ON W,A,I
 2020         >ON W,D,M
 2030         >ON X,B,A
 2040         >ON X,C,E
 2050  *--------------------------------
 2060  OPNAMES.B
 2070         >ON A,D,C
 2080         >ON A,N,D
 2090         >ON A,S,L
 2100         >ON B,C,C
 2110         >ON B,C,S
 2120         >ON B,E,Q
 2130         >ON B,I,T
 2140         >ON B,M,I
 2150         >ON B,N,E
 2160         >ON B,P,L
 2170         >ON B,R,A
 2180         >ON B,R,L
 2190         >ON B,V,C
 2200         >ON B,V,S
 2210         >ON C,M,P
 2220         >ON C,P,X
 2230         >ON C,P,Y
 2240         >ON D,E,C
 2250         >ON E,O,R
 2260         >ON I,N,C
 2270         >ON J,M,L
 2280         >ON J,M,P
 2290         >ON J,S,L
 2300         >ON J,S,R
 2310         >ON L,D,A
 2320         >ON L,D,X
 2330         >ON L,D,Y
 2340         >ON L,S,R
 2350         >ON M,V,N
 2360         >ON M,V,P
 2370         >ON O,R,A
 2380         >ON P,E,A
 2390         >ON P,E,I
 2400         >ON P,E,R
 2410         >ON R,E,P
 2420         >ON R,O,L
 2430         >ON R,O,R
 2440         >ON S,B,C
 2450         >ON S,E,P
 2460         >ON S,T,A
 2470         >ON S,T,X
 2480         >ON S,T,Y
 2490         >ON S,T,Z
 2500         >ON T,R,B
 2510         >ON T,S,B
 2520  *--------------------------------
 2530  OPINDEX
 2540  *---0X---------------------------
 2550         >OXA BRK
 2560         >OXB ORA
 2570         >OXA COP
 2580         >OXB ORA
 2590         >OXB TSB
 2600         >OXB ORA
 2610         >OXB ASL
 2620         >OXB ORA
 2630         >OXA PHP
 2640         >OXB ORA
 2650         >OXA ASLA
 2660         >OXA PHD
 2670         >OXB TSB
 2680         >OXB ORA
 2690         >OXB ASL
 2700         >OXB ORA
 2710  *---1X---------------------------
 2720         >OXB BPL
 2730         >OXB ORA
 2740         >OXB ORA
 2750         >OXB ORA
 2760         >OXB TRB
 2770         >OXB ORA
 2780         >OXB ASL
 2790         >OXB ORA
 2800         >OXA CLC
 2810         >OXB ORA
 2820         >OXA INCA
 2830         >OXA TCS
 2840         >OXB TRB
 2850         >OXB ORA
 2860         >OXB ASL
 2870         >OXB ORA
 2880  *---2X---------------------------
 2890         >OXB JSR
 2900         >OXB AND
 2910         >OXB JSL
 2920         >OXB AND
 2930         >OXB BIT
 2940         >OXB AND
 2950         >OXB ROL
 2960         >OXB AND
 2970         >OXA PLP
 2980         >OXB AND
 2990         >OXA ROLA
 3000         >OXA PLD
 3010         >OXB BIT
 3020         >OXB AND
 3030         >OXB ROL
 3040         >OXB AND
 3050  *---3X---------------------------
 3060         >OXB BMI
 3070         >OXB AND
 3080         >OXB AND
 3090         >OXB AND
 3100         >OXB BIT
 3110         >OXB AND
 3120         >OXB ROL
 3130         >OXB AND
 3140         >OXA SEC
 3150         >OXB AND
 3160         >OXA DECA
 3170         >OXA TSC
 3180         >OXB BIT
 3190         >OXB AND
 3200         >OXB ROL
 3210         >OXB AND
 3220  *---4X---------------------------
 3230         >OXA RTI
 3240         >OXB EOR
 3250         >OXA WDM
 3260         >OXB EOR
 3270         >OXB MVP
 3280         >OXB EOR
 3290         >OXB LSR
 3300         >OXB EOR
 3310         >OXA PHA
 3320         >OXB EOR
 3330         >OXA LSRA
 3340         >OXA PHK
 3350         >OXB JMP
 3360         >OXB EOR
 3370         >OXB LSR
 3380         >OXB EOR
 3390  *---5X---------------------------
 3400         >OXB BVC
 3410         >OXB EOR
 3420         >OXB EOR
 3430         >OXB EOR
 3440         >OXB MVN
 3450         >OXB EOR
 3460         >OXB LSR
 3470         >OXB EOR
 3480         >OXA CLI
 3490         >OXB EOR
 3500         >OXA PHY
 3510         >OXA TCD
 3520         >OXB JMP
 3530         >OXB EOR
 3540         >OXB LSR
 3550         >OXB EOR
 3560  *---6X---------------------------
 3570         >OXA RTS
 3580         >OXB ADC
 3590         >OXB PER
 3600         >OXB ADC
 3610         >OXB STZ
 3620         >OXB ADC
 3630         >OXB ROR
 3640         >OXB ADC
 3650         >OXA PLA
 3660         >OXB ADC
 3670         >OXA RORA
 3680         >OXA RTL
 3690         >OXB JMP
 3700         >OXB ADC
 3710         >OXB ROR
 3720         >OXB ADC
 3730  *---7X---------------------------
 3740         >OXB BVS
 3750         >OXB ADC
 3760         >OXB ADC
 3770         >OXB ADC
 3780         >OXB STZ
 3790         >OXB ADC
 3800         >OXB ROR
 3810         >OXB ADC
 3820         >OXA SEI
 3830         >OXB ADC
 3840         >OXA PLY
 3850         >OXA TDC
 3860         >OXB JMP
 3870         >OXB ADC
 3880         >OXB ROR
 3890         >OXB ADC
 3900  *---8X---------------------------
 3910         >OXB BRA
 3920         >OXB STA
 3930         >OXB BRL
 3940         >OXB STA
 3950         >OXB STY
 3960         >OXB STA
 3970         >OXB STX
 3980         >OXB STA
 3990         >OXA DEY
 4000         >OXB BIT
 4010         >OXA TXA
 4020         >OXA PHB
 4030         >OXB STY
 4040         >OXB STA
 4050         >OXB STX
 4060         >OXB STA
 4070  *---9X---------------------------
 4080         >OXB BCC
 4090         >OXB STA
 4100         >OXB STA
 4110         >OXB STA
 4120         >OXB STY
 4130         >OXB STA
 4140         >OXB STX
 4150         >OXB STA
 4160         >OXA TYA
 4170         >OXB STA
 4180         >OXA TXS
 4190         >OXA TXY
 4200         >OXB STZ
 4210         >OXB STA
 4220         >OXB STZ
 4230         >OXB STA
 4240  *---AX---------------------------
 4250         >OXB LDY
 4260         >OXB LDA
 4270         >OXB LDX
 4280         >OXB LDA
 4290         >OXB LDY
 4300         >OXB LDA
 4310         >OXB LDX
 4320         >OXB LDA
 4330         >OXA TAY
 4340         >OXB LDA
 4350         >OXA TAX
 4360         >OXA PLB
 4370         >OXB LDY
 4380         >OXB LDA
 4390         >OXB LDX
 4400         >OXB LDA
 4410  *---BX---------------------------
 4420         >OXB BCS
 4430         >OXB LDA
 4440         >OXB LDA
 4450         >OXB LDA
 4460         >OXB LDY
 4470         >OXB LDA
 4480         >OXB LDX
 4490         >OXB LDA
 4500         >OXA CLV
 4510         >OXB LDA
 4520         >OXA TSX
 4530         >OXA TYX
 4540         >OXB LDY
 4550         >OXB LDA
 4560         >OXB LDX
 4570         >OXB LDA
 4580  *---CX---------------------------
 4590         >OXB CPY
 4600         >OXB CMP
 4610         >OXB REP
 4620         >OXB CMP
 4630         >OXB CPY
 4640         >OXB CMP
 4650         >OXB DEC
 4660         >OXB CMP
 4670         >OXA INY
 4680         >OXB CMP
 4690         >OXA DEX
 4700         >OXA WAI
 4710         >OXB CPY
 4720         >OXB CMP
 4730         >OXB DEC
 4740         >OXB CMP
 4750  *---DX---------------------------
 4760         >OXB BNE
 4770         >OXB CMP
 4780         >OXB CMP
 4790         >OXB CMP
 4800         >OXB PEI
 4810         >OXB CMP
 4820         >OXB DEC
 4830         >OXB CMP
 4840         >OXA CLD
 4850         >OXB CMP
 4860         >OXA PHX
 4870         >OXA STP
 4880         >OXB JML
 4890         >OXB CMP
 4900         >OXB DEC
 4910         >OXB CMP
 4920  *---EX---------------------------
 4930         >OXB CPX
 4940         >OXB SBC
 4950         >OXB SEP
 4960         >OXB SBC
 4970         >OXB CPX
 4980         >OXB SBC
 4990         >OXB INC
 5000         >OXB SBC
 5010         >OXA INX
 5020         >OXB SBC
 5030         >OXA NOP
 5040         >OXA XBA
 5050         >OXB CPX
 5060         >OXB SBC
 5070         >OXB INC
 5080         >OXB SBC
 5090  *---FX---------------------------
 5100         >OXB BEQ
 5110         >OXB SBC
 5120         >OXB SBC
 5130         >OXB SBC
 5140         >OXB PEA
 5150         >OXB SBC
 5160         >OXB INC
 5170         >OXB SBC
 5180         >OXA SED
 5190         >OXB SBC
 5200         >OXA PLX
 5210         >OXA XCE
 5220         >OXB JSR
 5230         >OXB SBC
 5240         >OXB INC
 5250         >OXB SBC
 5260  *--------------------------------
 5270  OPFORMAT
 5280  F.0    .HS 00.14.00.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5290  F.1    .HS 26.16.12.1E.02.08.08.22.00.10.00.00.04.0A.0A.0C
 5300  F.2    .HS 04.14.06.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5310  F.3    .HS 26.16.12.1E.08.08.08.22.00.10.00.00.0A.0A.0A.0C
 5320  F.4    .HS 00.14.00.1C.24.02.02.20.00.00.00.00.04.04.04.06
 5330  F.5    .HS 26.16.12.1E.24.08.08.22.00.10.00.00.06.0A.0A.0C
 5340  F.6    .HS 00.14.28.1C.02.02.02.20.00.00.00.00.18.04.04.06
 5350  F.7    .HS 26.16.12.1E.08.08.08.22.00.10.00.00.1A.0A.0A.0C
 5360  F.8    .HS 26.14.28.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5370  F.9    .HS 26.16.12.1E.08.08.0E.22.00.10.00.00.04.0A.0A.0C
 5380  F.A    .HS 00.14.00.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5390  F.B    .HS 26.16.12.1E.08.08.0E.22.00.10.00.00.0A.0A.10.0C
 5400  F.C    .HS 00.14.00.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5410  F.D    .HS 26.16.12.1E.02.08.08.22.00.10.00.00.18.0A.0A.0C
 5420  F.E    .HS 00.14.00.1C.02.02.02.20.00.00.00.00.04.04.04.06
 5430  F.F    .HS 26.16.12.1E.08.08.08.22.00.10.00.00.1A.0A.0A.0C
 5440  *--------------------------------
 5450  FMTBL
 5460  *-----# > ( $ , X S ) , Y $ - - - LL
 5470   .DA %1.0.0.1.0.0.0.0.0.0.0.0.0.0.01 -- IMMEDIATE    00
 5480   .DA %0.0.0.1.0.0.0.0.0.0.0.0.0.0.01 -- DIRECT       02
 5490   .DA %0.0.0.1.0.0.0.0.0.0.0.0.0.0.10 -- ABS          04
 5500   .DA %0.0.0.1.0.0.0.0.0.0.0.0.0.0.11 -- LONG         06
 5510  *-----# > ( $ , X S ) , Y $ - - - LL
 5520   .DA %0.0.0.1.1.1.0.0.0.0.0.0.0.0.01 -- DIRECT,X     08
 5530   .DA %0.0.0.1.1.1.0.0.0.0.0.0.0.0.10 -- ABS,X        0A
 5540   .DA %0.0.0.1.1.1.0.0.0.0.0.0.0.0.11 -- LONG,X       0C
 5550  *-----# > ( $ , X S ) , Y $ - - - LL
 5560   .DA %0.0.0.1.1.0.0.0.0.1.0.0.0.0.01 -- DIRECT,Y     0E
 5570   .DA %0.0.0.1.1.0.0.0.0.1.0.0.0.0.10 -- ABS,Y        10
 5580  *-----# > ( $ , X S ) , Y $ - - - LL
 5590   .DA %0.0.1.1.0.0.0.1.0.0.0.0.0.0.01 -- IND          12
 5600   .DA %0.0.1.1.1.1.0.1.0.0.0.0.0.0.01 -- INDX         14
 5610   .DA %0.0.1.1.0.0.0.1.1.1.0.0.0.0.01 -- INDY         16
 5620  *-----# > ( $ , X S ) , Y $ - - - LL
 5630   .DA %0.0.1.1.0.0.0.1.0.0.0.0.0.0.10 -- INDABS       18
 5640   .DA %0.0.1.1.1.1.0.1.0.0.0.0.0.0.10 -- INDABSX      1A
 5650  *-----# > ( $ , X S ) , Y $ - - - LL
 5660   .DA %0.0.0.1.1.0.1.0.0.0.0.0.0.0.01 -- STK          1C
 5670   .DA %0.0.1.1.1.0.1.1.1.1.0.0.0.0.01 -- STKY         1E
 5680  *-----# > ( $ , X S ) , Y $ - - - LL
 5690   .DA %0.1.1.1.0.0.0.1.0.0.0.0.0.0.01 -- INDLONG      20
 5700   .DA %0.1.1.1.0.0.0.1.1.1.0.0.0.0.01 -- INDLONGY     22
 5710   .DA %0.0.0.1.0.0.0.0.1.0.1.0.0.0.10 -- MVN & MVP    24
 5720   .DA %0.0.0.0.0.0.0.0.0.0.1.0.0.0.01 -- RELATIVE     26
 5730   .DA %0.0.0.0.0.0.0.0.0.0.1.0.0.0.10 -- LONG RELA.   28
 5740  *--------------------------------
 5750  FMTSTR .AS -/$Y,)SX,$(>#/
 5760  *--------------------------------
 5770  INSDS1 JSR CROUT
 5780         LDA PCH
 5790         JSR PRBYTE
 5800         LDA PCL
 5810         JSR PRBYTE
 5820         LDA #"-"
 5830         JSR COUT
 5840         LDA #" "
 5850         JSR COUT
 5860         LDY #0
 5870         LDA (PCL),Y  GET OPCODE
 5880  INSDS2 TAY          SAVE IN Y-REG
 5890         LDA OPINDEX,Y
 5900         ASL
 5910         TAX
 5920         BCC .1       ...NOT SINGLE BYTE OPCODE
 5930         LDA OPNAMES.A,X
 5940         STA RMNEM
 5950         LDA OPNAMES.A+1,X
 5960         STA LMNEM
 5970         LDA #0
 5980         STA LENGTH
 5990         RTS
 6000  *--------------------------------
 6010  .1     LDA OPNAMES.B,X
 6020         STA RMNEM
 6030         LDA OPNAMES.B+1,X
 6040         STA LMNEM
 6050         LDX OPFORMAT,Y
 6060         LDA FMTBL+1,X
 6070         STA FORMATH
 6080         LDA FMTBL,X
 6090         STA FORMATL
 6100         AND #3
 6110         STA LENGTH
 6120         TXA          CHECK IF IMMEDIATE
 6130         BNE .2       ...NO
 6140         BIT IMM.SIZE CHECK IF 16-BIT MODE
 6150         BPL .2       ...NO
 6160         INC LENGTH   ...YES
 6170  .2     RTS
 6180  *--------------------------------
 6190  INSTDSP
 6200         JSR INSDS1
 6210         LDY #0
 6220  .1     LDA (PCL),Y
 6230         JSR PRBYTE
 6240         LDX #1       PRINT 1 BLANK
 6250  .2     JSR PRBL2
 6260         CPY LENGTH
 6270         INY
 6280         BCC .1
 6290         LDX #3
 6300         CPY #4
 6310         BCC .2
 6320  *---PRINT MNEMONIC---------------
 6330         LDY #3
 6340  .3     LDA #6
 6350  .4     ASL RMNEM
 6360         ROL LMNEM
 6370         ROL
 6380         BPL .4
 6390         JSR COUT
 6400         DEY
 6410         BNE .3
 6420         LDY LENGTH
 6430         BEQ .8       ...SINGLE BYTE OPCODE
 6440         LDA FORMATL
 6450         AND #$20     SEE IF SPECIAL
 6460         BNE .9       ...YES, MOVES OR RELATIVES
 6470  *---PRINT NORMAL OPERANDS--------
 6480         LDA #" "
 6490         JSR COUT
 6500         LDX #10      11 FORMAT BITS
 6510  .5     ASL FORMATL
 6520         ROL FORMATH
 6530         BCC .7
 6540         LDA FMTSTR,X
 6550         JSR COUT
 6560         CMP #"#"
 6570         BNE .55
 6580         BIT IMM.SIZE
 6590         BPL .7
 6600         JSR COUT
 6610  .55    CMP #"$"
 6620         BNE .7
 6630  .6     LDA (PCL),Y
 6640         JSR PRBYTE
 6650         DEY
 6660         BNE .6
 6670  .7     DEX
 6680         BPL .5
 6690  .8     RTS
 6700  *---SPECIAL CASES----------------
 6710  .9     LDA #" "
 6720         JSR COUT
 6730         LDA #"$"
 6740         JSR COUT
 6750         LDA FORMATL
 6760         BMI .11      MVN & MVP
 6770         DEY          DISTINGUISH RELATIVES
 6780         BNE .10      16-BIT RELATIVE
 6790  *---8-BIT RELATIVE---------------
 6800         INY          8-BIT RELATIVE
 6810         LDA (PCL),Y  GET 8-BIT OFFSET
 6820         SEC
 6830         JMP RELADR
 6840  *---16-BIT RELATIVE--------------
 6850  .10    LDA (PCL),Y  LOW BYTE OF OFFSET
 6860         STA FORMATL
 6870         INY
 6880         LDA (PCL),Y  HIGH BYTE OF OFFSET
 6890         STA FORMATH
 6900         JSR PCADJ
 6910         CLC
 6920         ADC FORMATL
 6930         TAX
 6940         TYA
 6950         ADC FORMATH
 6960         JMP PRNTAX
 6970  *---MVN & MVP--------------------
 6980  .11    LDA (PCL),Y
 6990         JSR PRBYTE
 7000         LDA #","
 7010         JSR COUT
 7020         LDA #"$"
 7030         JSR COUT
 7040         DEY
 7050         LDA (PCL),Y
 7060         JMP PRBYTE
 7070  *--------------------------------
 7080  TT     LDY #0
 7090         LDA #$C0
 7100         STA PCL
 7110         LDA #2       $2C0...$3C3
 7120         STA PCH
 7130  .1     TYA
 7140         STA $2C0,Y
 7150         INY
 7160         BNE .1
 7170         STY $3C0
 7180         INY
 7190         STY $3C1
 7200         INY
 7210         STY $3C2
 7220  .2     JSR INSTDSP
 7230         LDY #0
 7240         LDA (PCL),Y
 7250         CMP #$FF
 7260         BEQ .3
 7270  .4     LDA $C000
 7280         BPL .4
 7290         STA $C010
 7300         INC PCL
 7310         BNE .2
 7320         INC PCH
 7330         BNE .2       ...ALWAYS
 7340  .3     RTS
 7350  *--------------------------------

